window["mmt"] =
/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};

/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {

/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;

/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};

/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/ 		// Flag the module as loaded
/******/ 		module.l = true;

/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}


/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;

/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;

/******/ 	// identity function for calling harmony imports with the correct context
/******/ 	__webpack_require__.i = function(value) { return value; };

/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};

/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};

/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };

/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";

/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


// https://github.com/tj/node-querystring/blob/master/index.js(去掉 export)
var toString = Object.prototype.toString;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var indexOf = typeof Array.prototype.indexOf === 'function'
  ? function(arr, el) {
      return arr.indexOf(el);
    }
  : function(arr, el) {
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] === el) {
          return i;
        }
      }
      return -1;
    };
var isArray =
  Array.isArray ||
  function(arr) {
    return toString.call(arr) == '[object Array]';
  };
var objectKeys =
  Object.keys ||
  function(obj) {
    var ret = [];
    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
        ret.push(key);
      }
    }
    return ret;
  };
var forEach = typeof Array.prototype.forEach === 'function'
  ? function(arr, fn) {
      return arr.forEach(fn);
    }
  : function(arr, fn) {
      for (var i = 0; i < arr.length; i++) {
        fn(arr[i]);
      }
    };
var reduce = function(arr, fn, initial) {
  if (typeof arr.reduce === 'function') {
    return arr.reduce(fn, initial);
  }
  var res = initial;
  for (var i = 0; i < arr.length; i++) {
    res = fn(res, arr[i]);
  }
  return res;
};
var isint = /^[0-9]+$/;
function promote(parent, key) {
  if (parent[key].length == 0) {
    return (parent[key] = {});
  }
  var t = {};
  for (var i in parent[key]) {
    if (hasOwnProperty.call(parent[key], i)) {
      t[i] = parent[key][i];
    }
  }
  parent[key] = t;
  return t;
}
function parse(parts, parent, key, val) {
  var part = parts.shift();
  if (hasOwnProperty.call(Object.prototype, key)) {
    return;
  }
  if (!part) {
    if (isArray(parent[key])) {
      parent[key].push(val);
    } else {
      if ('object' == typeof parent[key]) {
        parent[key] = val;
      } else {
        if ('undefined' == typeof parent[key]) {
          parent[key] = val;
        } else {
          parent[key] = [parent[key], val];
        }
      }
    }
  } else {
    var obj = (parent[key] = parent[key] || []);
    if (']' == part) {
      if (isArray(obj)) {
        if ('' != val) {
          obj.push(val);
        }
      } else {
        if ('object' == typeof obj) {
          obj[objectKeys(obj).length] = val;
        } else {
          obj = parent[key] = [parent[key], val];
        }
      }
    } else {
      if (~indexOf(part, ']')) {
        part = part.substr(0, part.length - 1);
        if (!isint.test(part) && isArray(obj)) {
          obj = promote(parent, key);
        }
        parse(parts, obj, part, val);
      } else {
        if (!isint.test(part) && isArray(obj)) {
          obj = promote(parent, key);
        }
        parse(parts, obj, part, val);
      }
    }
  }
}
function merge(parent, key, val) {
  if (~indexOf(key, ']')) {
    var parts = key.split('['), len = parts.length, last = len - 1;
    parse(parts, parent, 'base', val);
  } else {
    if (!isint.test(key) && isArray(parent.base)) {
      var t = {};
      for (var k in parent.base) {
        t[k] = parent.base[k];
      }
      parent.base = t;
    }
    set(parent.base, key, val);
  }
  return parent;
}
function compact(obj) {
  if ('object' != typeof obj) {
    return obj;
  }
  if (isArray(obj)) {
    var ret = [];
    for (var i in obj) {
      if (hasOwnProperty.call(obj, i)) {
        ret.push(obj[i]);
      }
    }
    return ret;
  }
  for (var key in obj) {
    obj[key] = compact(obj[key]);
  }
  return obj;
}
function parseObject(obj) {
  var ret = { base: {} };
  forEach(objectKeys(obj), function(name) {
    merge(ret, name, obj[name]);
  });
  return compact(ret.base);
}
function parseString(str, options) {
  var ret = reduce(
    String(str).split(options.separator),
    function(ret, pair) {
      var eql = indexOf(pair, '='),
        brace = lastBraceInKey(pair),
        key = pair.substr(0, brace || eql),
        val = pair.substr(brace || eql, pair.length),
        val = val.substr(indexOf(val, '=') + 1, val.length);
      if ('' == key) {
        (key = pair), (val = '');
      }
      if ('' == key) {
        return ret;
      }
      return merge(ret, decode(key), decode(val));
    },
    { base: {} }
  ).base;
  return compact(ret);
}
var parse = function(str, options) {
  if (null == str || '' == str) {
    return {};
  }
  options = options || {};
  options.separator = options.separator || '&';
  return 'object' == typeof str ? parseObject(str) : parseString(str, options);
};
var stringify = function(obj, prefix) {
  if (isArray(obj)) {
    return stringifyArray(obj, prefix);
  } else {
    if ('[object Object]' == toString.call(obj)) {
      return stringifyObject(obj, prefix);
    } else {
      if ('string' == typeof obj) {
        return stringifyString(obj, prefix);
      } else {
        return prefix + '=' + encodeURIComponent(String(obj));
      }
    }
  }
};
function stringifyString(str, prefix) {
  if (!prefix) {
    throw new TypeError('stringify expects an object');
  }
  return prefix + '=' + encodeURIComponent(str);
}
function stringifyArray(arr, prefix) {
  var ret = [];
  if (!prefix) {
    throw new TypeError('stringify expects an object');
  }
  for (var i = 0; i < arr.length; i++) {
    ret.push(stringify(arr[i], prefix + '[' + i + ']'));
  }
  return ret.join('&');
}
function stringifyObject(obj, prefix) {
  var ret = [], keys = objectKeys(obj), key;
  for (var i = 0, len = keys.length; i < len; ++i) {
    key = keys[i];
    if ('' == key) {
      continue;
    }
    if (null == obj[key]) {
      ret.push(encodeURIComponent(key) + '=');
    } else {
      ret.push(
        stringify(
          obj[key],
          prefix
            ? prefix + '[' + encodeURIComponent(key) + ']'
            : encodeURIComponent(key)
        )
      );
    }
  }
  return ret.join('&');
}
function set(obj, key, val) {
  var v = obj[key];
  if (hasOwnProperty.call(Object.prototype, key)) {
    return;
  }
  if (undefined === v) {
    obj[key] = val;
  } else {
    if (isArray(v)) {
      v.push(val);
    } else {
      obj[key] = [v, val];
    }
  }
}
function lastBraceInKey(str) {
  var len = str.length, brace, c;
  for (var i = 0; i < len; ++i) {
    c = str[i];
    if (']' == c) {
      brace = false;
    }
    if ('[' == c) {
      brace = true;
    }
    if ('=' == c && !brace) {
      return i;
    }
  }
}
function decode(str) {
  try {
    return decodeURIComponent(str.replace(/\+/g, ' '));
  } catch (err) {
    return str;
  }
}

// 暂时支持 _setCustomVar(自定义变量) _trackEvent(追踪事件)
// _mmt.push(['_setCustomVar', 1, 'siteId', '100001', 1])
// _mmt.push(['_trackEvent', 'clg', 'click', 'hahaha', 'vivivi'])
// 若想监听全部 a 标签事件,用下列的 push
// _mmt.push(['_trackEvent', 'a', 'click']);

/**
 * _trackEvent 例子
 * 
 * href javascript:;
 * <a href="javascript:_mmt.push(['_trackEvent', 'test', 'click', 'test_label', 'test_value']);" >test</a>
 * 
 * onclick 事件
 * <div onclick="_mmt.push(['_trackEvent', 'test_onclick', 'click', 'test_onclick_label', 'test_onclick_value']);">test</div>
 * 
 * 绑定 class
 * <div class="test_class">test</div>
 * <script>
 *  $('.test_class').click(function(){
 *    _mmt.push(['_trackEvent', 'test_class', 'click', 'test_class_label', 'test_class_value']);
 * })
 * </script>
 */

(function() {
  var params = {
    domain: '',
    lang: '',
    platform: '',
    protocol: '',
    referrer: '',
    screenHeight: '',
    screenWidth: '',
    sessionId: '',
    siteId: '',
    step: '',
    title: '',
    uid: '',
    url: '',
    userAgent: '',
    _trackEvent: {},
    _setCustomVar: {}
  };

  /**
   * 判断运行环境
   */
  var ua = navigator.userAgent.toLowerCase();

  // PC
  var isWin = ua.indexOf('windows') !== -1;
  var isMac = ua.indexOf('macintosh') !== -1;
  var isLinux = ua.indexOf('linux') !== -1;
  var isPC = isWin || isMac || isLinux ? true : false;
  // wap
  var isIOS = /iphone|ipad|ipod/.test(ua);
  var isAndriod = /android/.test(ua);

  var isGzq = /gzq/.test(ua);
  var isMmq = /mmq/.test(ua);
  var isPh = /pregnancyhelper/.test(ua);
  var isApp = isGzq || isMmq || isPh ? true : false;

  /**
   * 工具类
   */

  /**
 * 添加/删除 cookie 
 * @param  key      
 * @param  value     -1 为删除
 * @param  exp       生存期限 - 默认 30 天
 */
  function createCookie(key, value, exp) {
    var date = new Date();
    date.setTime(date.getTime() + (exp || 30 * 24 * 60 * 60 * 1000));
    var expires = '; expires=' + date.toGMTString();
    document.cookie =
      key + '=' + value + expires + '; path=/' + '; domain=.mama.cn';
  }

  /**
 * 设置 cookie 值
 * @param  key      
 * @param  value     
 */
  function setCookie(key, value) {
    document.cookie = key + '=' + value;
  }

  /**
   * 读取cookie
   * @param  key
   */
  function readCookie(key) {
    var nameEQ = key + '=';
    var ca = document.cookie.split(';');
    for (var i = 0, max = ca.length; i < max; i++) {
      var c = ca[i];
      while (c.charAt(0) === ' ') {
        c = c.substring(1, c.length);
      }
      if (c.indexOf(nameEQ) === 0) {
        return c.substring(nameEQ.length, c.length);
      }
    }
    return null;
  }

  /**
   * _trackEvent
   * 作用: 用于触发某个事件，如某个按钮的点击，或播放器的播放/停止，以及游戏的开始/暂停等。
   * 语法: _mmt.push(['_trackEvent', category, action, opt_label, opt_value]);
   * 例子: _mmt.push(['_trackEvent', 'music', 'play', 'Hey Jude']);
   * 参数: category	必选	String	要监控的目标的类型名称	不填、填"-"的事件会被抛弃
   * action	必选	String	用户跟网页进行交互的动作名称	不填、填"-"的事件会被抛弃
   * opt_label	可选	String	事件的一些额外信息	不填、填"-"代表此项为空
   * opt_value	可选	Number	跟事件相关的数值	
   */
  function _trackEventCore(category, action, opt_label, opt_value) {
    var category = category || 'default';
    var action = action || 'click';
    var opt_label = opt_label || '';
    var opt_value = opt_value || '';

    if (!category) {
      return;
    }

    // 先清空之前的对象
    params._trackEvent = {};

    params._trackEvent[category] = {};
    params._trackEvent[category]['action'] = action;

    if (opt_label) {
      params._trackEvent[category]['opt_label'] = opt_label;
    }

    if (opt_value) {
      params._trackEvent[category]['opt_value'] = opt_value;
    }
  }

  function _trackEvent(category, action, opt_label, opt_value) {
    _trackEventCore(category, action, opt_label, opt_value);
    sendParams(params);
  }

  function _trackEventStatic(category, action, opt_label, opt_value) {
    _trackEventCore(category, action, opt_label, opt_value);
  }

  /**
  * _setCustomVar
  * 作用: 指定一个自定义变量，用于追踪用户使用行为等。
  * 语法: _mmt.push(['_setCustomVar', index, name, value, opt_scope]);
  * 例子: _mmt.push(['_setCustomVar', 1, 'login', '1', 2]);
  * 参数: index	必选	Int	自定义变量所占用的位置	索引的范围是从1到5
  *      name	必选	String	自定义变量的名字	每个索引对应的名字在使用一次后就会固定 以后无法更改
  *      value	必选	String	自定义变量的值	
  *      opt_scope	可选	Int	自定义变量的作用范围	1为访客级别（对该访客始终有效）2为访次级别（在当前访次内生效）3为页面级别（仅在当前页面生效）默认为3
  */
  function _setCustomVar(index, name, value, opt_scope) {
    var index = index || 1;
    var opt_scope = opt_scope || 1;

    params._setCustomVar['index'] = index;
    params._setCustomVar[name] = value;
  }

  /**
 * _trackPageview
 * 作用: 用于发送某个指定URL的PV统计请求，通常用于AJAX页面的PV统计。
 * 语法: _mmt.push(['_trackPageview', pageURL]);
 * 例子: _mmt.push(['_trackPageview', '/virtual/login']);
 * 参数: pageURL	必选	String	指定要统计PV的页面URL	必须是以"/"（斜杠）开头的相对路径
 */
  function _trackPageview(pageURL) {
    if (params) {
      params.url = location.hostname + pageURL;
      sendParams(params);
    }
  }

  /**
   * sendParams
   * @param {String} params 维度对象
   */
  function sendParams(params,callback) {

    var args = stringify(params);

    var _noCacheRandom = Math.random();

    //通过Image对象请 求后端脚本
    var img = new Image(1, 1);
    // why do this? new Image()是一个没有引用的临时变量，随时可能被浏览器的垃圾回收机制回收。如果这个图片的HTTP请求尚未建立，那么在被回收时这个请求就会被取消，导致打点并没有真正发出。如果打点所在的页面比较复杂，浏览器垃圾回收机制可能会被频繁触发，那么这种方式打点的丢失率可能会高达10%以上。
    var rnd_id = '_img_' + Math.random();
    window[rnd_id] = img;
    img.onload = img.onerror = function() {
      window[rnd_id] = null;
      callback && callback();
    };
    img.src = 'https://dmp-api.mama.cn/collect/x.gif?' + args + '&noCacheRandom=' + _noCacheRandom;
  }

  /**
   * 初始化
   */

  (function init() {
    // 种个 cookie 默认30分钟
    if (!readCookie('mmt_step')) {
      createCookie('mmt_step', true, 30 * 60 * 1000);
    }
  })();

  // 初始化插入自定义属性
  if (Object.prototype.toString.call(_mmt) === '[object Array]') {
    for (var i = 0; i < _mmt.length; i++) {
      switch (_mmt[i][0]) {
        case '_setCustomVar':
          _setCustomVar(_mmt[i][1], _mmt[i][2], _mmt[i][3], _mmt[i][4]);
          break;
        case '_trackEvent':
          _trackEventStatic(_mmt[i][1], _mmt[i][2], _mmt[i][3], _mmt[i][4]);
          break;
        default:
          break;
      }
    }
  }

  // 添加对象方法
  // _mmt.push
  _mmt.push = function() {
    switch (arguments[0][0]) {
      case '_setCustomVar':
        _setCustomVar(
          arguments[0][1],
          arguments[0][2],
          arguments[0][3],
          arguments[0][4]
        );
        break;
      case '_trackEvent':
        _trackEvent(
          arguments[0][1],
          arguments[0][2],
          arguments[0][3],
          arguments[0][4]
        );
        break;
      case '_trackPageview':
        _trackPageview(
          arguments[0][1]
        );
        break;
      default:
        break;
    }
  };

  /************************************/

  /**
   * 收集维度
   */

  //Document对象数据
  if (document) {
    // siteID
    var mmtScript = document.getElementById('mmt');
    var scriptSrc = mmtScript.src;
    var query = parse(scriptSrc.split('?')[1]);

    params.siteId = query.siteId || '';
    params.domain = document.domain || '';
    params.url = document.URL || '';
    params.title = document.title || '';
    params.referrer = document.referrer || '';
    params.uid = readCookie('mamaid') || readCookie('user_id');
    // APP 下获取 device_id
    if (isApp) {
      console.log('无法获取app设备号');
    }

    params.sessionId = query.sessionId || '';
  }

  //Window对象数据
  if (window && window.screen) {
    params.screenHeight = window.screen.height || 0;
    params.screenWidth = window.screen.width || 0;
  }

  //location
  if (location) {
    params.protocol = location.protocol || '';
  }

  //navigator对象数据
  if (navigator) {
    params.lang = navigator.language || '';
    params.userAgent = navigator.userAgent || '';
    params.platform = navigator.platform || '';
  }

  // 自定义数据
  /**
   * step [string] 访问次数，在规定时间内（比如30分钟）每刷新一次累加，超过规定时间重新计算
   */
  var oriStep = readCookie('step');

  // 获取到 mmt_step 且 获取不到 step 时,创建 step
  if (readCookie('mmt_step') && !oriStep) {
    createCookie('step', 1, 30 * 60 * 1000);
  }
  if (readCookie('mmt_step') && oriStep) {
    setCookie('step', parseInt(oriStep) + 1, 30 * 60 * 1000);
  }
  params.step = readCookie('step');

  sendParams(params);
})();

/**
 * _setAccount
 * 作用: 如果您的页面中同时埋放了多段百度统计的访问分析代码，只有使用_setAccount接口指定了账号的代码才会响应JS-API调用，其他代码都会忽略JS-API调用。
 * 语法: _mmt.push(['_setAccount', siteId);
 * 例子: _mmt.push(['_setAccount', '0123456789ABCDEF0123456789ABCDEF']);
 * 参数: siteId	必选	String	指定要响应JS-API调用的帐号的站点id
 */


/***/ })
/******/ ]);